Prevent duplicate Quick Edit save requests - #12869
Conversation
3d54122 to
93ec099
Compare
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
93ec099 to
b8a0463
Compare
b8a0463 to
09bbfae
Compare
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
irozum
left a comment
There was a problem hiding this comment.
This is a solid, minimal fix for the actual root cause of #25696: a shared saving guard set synchronously before the request is sent means a second click (or Enter keypress) while a save is in flight returns false immediately instead of firing a second request that can later operate on a row the first response already replaced/removed. It also matches the approach afercia proposed for this exact ticket over a decade ago ("when saving maybe it should just return false").
I checked out the branch, ran a full rebuild, and ran the QUnit suite plus typecheck:js — all pass, including the two new tests. CI's own Coding Standards/PHPUnit-equivalent checks are green too; the one red job (PHP 8.0 / MariaDB 12.1) is an unrelated infra failure (composer update couldn't reach packagist.org), not something this diff caused. .always() correctly clears the flag on both success and error/network-failure paths, so there's no way to get the button stuck.
One thing worth a mention on the ticket rather than blocking here: saving is shared per editor instance, not per-row, so opening Quick Edit on a different row while another row's save is still in flight will silently no-op that click with zero feedback until the first request resolves — same "should we show a busy cursor" concern azaozz raised in comment 16 back in 2015, still open. Given requests are typically sub-second this is low-impact, but it's the kind of thing that's easy to miss testing manually since it only shows up under real latency.
Small nit: the file's top-level namespace docblock documents @property {string} type / @property {string} what for inlineEditPost — worth adding @property {boolean} saving there too for consistency, alongside the inline comment on the property itself.
|
@irozum Thanks for the review. I added the requested |
Fixes #25696
What changed
Why
Double-clicking Quick Edit can submit duplicate requests. The first response removes the inline-edit row, while the second response then operates on missing markup.
Validation
Trac: https://core.trac.wordpress.org/ticket/25696